home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1980-01-01 | 11.3 KB | 390 lines |
- 1 KEY(10) ON:ON KEY(10) GOSUB 3
- 2 GOTO 5
- 3 RUN"MENU.BAT"+CHR$(13)
- 5 CLS
- 6 LOCATE 23,24:PRINT "Press F10 to EXIT program.
- 100 REM ------------------------------
- 110 N$= "FINANCIAL PROGRAMS"
- 120 REM ------------------------------
- 130 GOSUB 6200 'INITIALIZE
- 140 REM SET UP MENU ARRAY
- 150 X$(1)="FUTURE VALUE OF DEPOSIT"
- 160 X$(2)="FUTURE VALUE OF SERIES"
- 170 X$(3)="PRESENT VALUE OF AMOUNT"
- 180 X$(4)="PRESENT VALUE OF SERIES"
- 190 X$(5)="PAYMENT REQD FOR FUTURE SUM"
- 200 X$(6)="WITHDRAWL OF FUNDS"
- 210 X$(7)="INTEREST RATE EARNED"
- 220 X$(8)="NET PRESENT VALUE, UNEVEN CASH FLOWS"
- 230 X$(9)="TIME TO DOUBLE"
- 240 X$(10)="EQUIVALENT INTEREST RATE"
- 250 N=10: GOSUB 7000
- 260 ON X GOSUB 280,490,690,860,1050,1240,1480,1660,2020,2180
- 270 GOTO 100
- 280 REM -------------------------------
- 290 N$= "FUTURE VALUE OF DEPOSIT"
- 300 REM -------------------------------
- 310 GOSUB 6200 : K=1 'INITIALIZE
- 320 REM ASK FOR PARAMETERS
- 330 Q1$="ENTER DATA" : Q2$=""
- 340 Q3$="INITIAL DEPOSIT ($)" :GOSUB 6600
- 350 Q3$="PERIODS PER YEAR" :GOSUB 6600
- 360 Q3$="ANNUAL INT RATE (%)" :GOSUB 6600
- 370 Q3$="NUMBER OF YEARS" :GOSUB 6600
- 380 REM DO THE COMPUTATION
- 390 PRINT
- 400 PRINT "FUTURE VALUE"; TAB(22)
- 410 A=PAR(1)
- 420 FOR I=1 TO PAR(2)*PAR(4)
- 430 A=A+A*PAR(3)/100/PAR(2)
- 440 NEXT I
- 450 A=INT(A*100+0.5)/100
- 460 PRINT USING "$$######,.##" ; A
- 470 Q2$="COMPUTE" : GOSUB 3400 'ASK FOR ANOTHER
- 480 IF YN$="N" THEN RETURN ELSE GOTO 280
- 490 REM ------------------------------
- 500 N$= "FUTURE VALUE OF SERIES"
- 510 REM ------------------------------
- 520 GOSUB 6200 : K=1 'INITIALIZE
- 530 REM ASK FOR PARAMETERS
- 540 Q1$="ENTER DATA" : Q2$=""
- 550 Q3$="PAYMENT ($)" :GOSUB 6600
- 560 Q3$="PAYMENTS PER YEAR" :GOSUB 6600
- 570 Q3$="ANNUAL INT RATE (%)" :GOSUB 6600
- 580 Q3$="NUMBER OF YEARS" :GOSUB 6600
- 590 REM COMPUTE RESULT
- 600 PRINT : PRINT "FUTURE VALUE"; TAB(22)
- 610 A=0
- 620 FOR I = 1 TO PAR(2)*PAR(4)
- 630 A=PAR(1)+A +A*PAR(3)/100/PAR(2)
- 640 NEXT I
- 650 A= INT(A*100+0.5)/100
- 660 PRINT USING "$$######,.##"; A
- 670 Q2$="COMPUTE" : GOSUB 3400 'ASK FOR ANOTHER
- 680 IF YN$="N" THEN RETURN ELSE 520
- 690 REM ------------------------------
- 700 N$= "PRESENT VALUE OF AMOUNT"
- 710 REM ------------------------------
- 720 GOSUB 6200 : K=1 'INITIALIZE
- 730 REM ASK FOR PARAMETERS
- 740 Q1$="ENTER DATA" : Q2$=""
- 750 Q3$="FUTURE VALUE ($)" :GOSUB 6600
- 760 Q3$="PERIODS PER YEAR" :GOSUB 6600
- 770 Q3$="ANNUAL INT RATE (%)" :GOSUB 6600
- 780 Q3$="NUMBER OF YEARS" :GOSUB 6600
- 790 REM DO THE COMPUTATION
- 800 PRINT : PRINT "PRESENT VALUE";TAB(22)
- 810 A=PAR(1)/(1+PAR(3)/100/PAR(2))^(PAR(2)*PAR(4))
- 820 A=INT(A*100+0.5)/100
- 830 PRINT USING "$$######,.##"; A
- 840 Q2$="COMPUTE" : GOSUB 3400
- 850 IF YN$="N" THEN RETURN ELSE GOTO 690
- 860 REM ------------------------------
- 870 N$= "PRESENT VALUE OF SERIES"
- 880 REM ------------------------------
- 890 GOSUB 6200 : K=1 'INITIALIZE
- 900 REM ASK FOR PARAMETERS
- 910 Q3$="PAYMENT ($)" :GOSUB 6600
- 920 Q3$="PAYMENTS PER YEAR" :GOSUB 6600
- 930 Q3$="ANNUAL INT RATE (%)" :GOSUB 6600
- 940 Q3$="NUMBER OF YEARS" :GOSUB 6600
- 950 REM DO THE COMPUTATION
- 960 PRINT : PRINT "PRESENT VALUE";TAB(22)
- 970 A=0
- 980 FOR I = 1 TO PAR(2)*PAR(4)
- 990 A=A+PAR(1)/((1+PAR(3)/100/PAR(2))^I)
- 1000 NEXT I
- 1010 A=INT(A*100+0.5)/100
- 1020 PRINT USING "$$######,.##"; A
- 1030 Q2$="COMPUTE" : GOSUB 3400 'ASK FOR ANOTHER
- 1040 IF YN$="N" THEN RETURN ELSE GOTO 860
- 1050 REM ------------------------------
- 1060 N$= "PAYMENT REQD FOR FUTURE SUM"
- 1070 REM ------------------------------
- 1080 GOSUB 6200 : K=1 'INITIALIZE
- 1090 REM ASK FOR PARAMETERS
- 1100 Q1$="ENTER DATA" :Q2$=""
- 1110 Q3$="FUTURE VALUE ($)" :GOSUB 6600
- 1120 Q3$="PAYMENTS PER YEAR" :GOSUB 6600
- 1130 Q3$="ANNUAL INT RATE (%)" :GOSUB 6600
- 1140 Q3$="NUMBER OF YEARS" :GOSUB 6600
- 1150 REM DO THE COMPUTATION
- 1160 PRINT : PRINT "PAYMENT";TAB(22)
- 1170 I=PAR(3)/100/PAR(2)
- 1180 Q=PAR(2)*PAR(4)
- 1190 A=PAR(1)*I/((1+I)^Q-1)
- 1200 A=INT(A*100+0.5)/100
- 1210 PRINT USING "$$######,.##"; A
- 1220 Q2$="COMPUTE" : GOSUB 3400 'ASK FOR ANOTHER
- 1230 IF YN$="N" THEN RETURN ELSE GOTO 1050
- 1240 REM ------------------------------
- 1250 N$= "WITHDRAWAL OF FUNDS"
- 1260 REM ------------------------------
- 1270 GOSUB 6200 : K=1 'INITIALIZE
- 1280 REM ASK FOR PARAMETERS
- 1290 Q1$="ENTER DATA" :Q2$=""
- 1300 Q3$="INITIAL DEPOSIT ($)" :GOSUB 6600
- 1310 Q3$="WITHDWLS PER YEAR" :GOSUB 6600
- 1320 Q3$="ANNUAL INT RATE (%)" :GOSUB 6600
- 1330 Q3$="PAYMENT ($)" :GOSUB 6600
- 1340 REM DO THE COMPUTATION
- 1350 PRINT : PRINT "PAYMENTS";TAB(25)
- 1360 A=PAR(1) : N=1
- 1370 A=A+A*PAR(3)/100/PAR(2)-PAR(4)
- 1380 IF A < PAR(1) THEN 1400
- 1390 PRINT: PRINT "BANK BALANCE IS GROWING"
- 1395 SOUND 500,9 :GOTO 1460
- 1400 IF A < PAR(4) THEN 1430
- 1410 N=N+1
- 1420 GOTO 1370
- 1430 PRINT USING "######.##"; N
- 1440 PRINT "YEARS OF PAYMENTS";TAB(25)
- 1450 PRINT USING "######.##"; N/12
- 1460 Q2$="COMPUTE" : GOSUB 3400 'ASK FOR ANOTHER
- 1470 IF YN$="N" THEN RETURN ELSE GOTO 1240
- 1480 REM ------------------------------
- 1490 N$= "INTEREST RATE EARNED"
- 1500 REM ------------------------------
- 1510 GOSUB 6200 : K=1 'INITIALIZE
- 1520 REM ASK FOR PARAMETERS
- 1530 Q1$="ENTER DATA" :Q2$=""
- 1540 Q3$="AMOUNT INVESTED ($)" :GOSUB 6600
- 1550 Q3$="AMOUNT RETURNED ($)" :GOSUB 6600
- 1560 Q3$="PERIODS PER YEAR" :GOSUB 6600
- 1570 Q3$="NUMBER OR YEARS" :GOSUB 6600
- 1580 REM DO THE COMPUTATION
- 1590 PRINT : PRINT "ANNUAL INT RATE (%)";TAB(24)
- 1600 Q=PAR(3)*PAR(4)
- 1610 I=((PAR(2)/PAR(1))^(1/Q)-1)*100*PAR(3)
- 1620 I=INT(I*100+0.5)/100
- 1630 PRINT USING "######,.##"; I
- 1640 Q2$="COMPUTE" : GOSUB 3400 'ASK FOR ANOTHER
- 1650 IF YN$="N" THEN RETURN ELSE GOTO 1480
- 1660 REM --------------------------------------
- 1670 N$= "NET PRESENT VALUE, UNEVEN CASH FLOWS"
- 1680 REM --------------------------------------
- 1690 DIM PV(100) 'INITIALIZE
- 1700 GOSUB 6200 :K=1
- 1710 REM ASK FOR PARAMETERS
- 1720 Q1$="ENTER DATA" :Q2$=""
- 1730 Q3$="AMOUNT INVESTED ($)" :GOSUB 6600
- 1740 Q3$="ANNUAL INT RATE (%)" :GOSUB 6600
- 1750 Q1$="ENTER ANNUAL CASH FLOWS"
- 1760 Q2$="IN ORDER RECEIVED"
- 1770 Q3$="STRIKE RETURN WHEN DONE"
- 1780 GOSUB 5000 'ASK QUESTIONS
- 1790 J=10
- 1800 FOR I=1 TO 100
- 1810 LOCATE J,1
- 1820 PRINT "CASH FLOW "+STR$(I);" ";
- 1830 LOCATE J,14
- 1840 INPUT PV(I) 'GET DATA & STORE
- 1850 IF PV(I)=0 THEN 1890
- 1860 J=J+1
- 1870 IF J=16 THEN J=10 'RESET POINTER
- 1880 NEXT I
- 1890 NPV=-PAR(1)
- 1900 FOR I=1 TO 100
- 1910 NPV= NPV+PV(I)/(1+PAR(2)/100)^I
- 1920 NEXT I
- 1930 LOCATE 6,1
- 1940 PRINT : PRINT "NET PRESENT VALUE";TAB(22)
- 1950 A=INT(NPV*100+0.5)/100
- 1960 PRINT USING "$$######,.##"; A
- 1970 FOR I= 1 TO 100
- 1980 PV(I)=0
- 1990 NEXT I
- 2000 Q2$="COMPUTE" : GOSUB 3400 'ASK FOR ANOTHER
- 2010 IF YN$="N" THEN RETURN ELSE GOTO 1700
- 2020 REM ------------------------------
- 2030 N$= "TIME TO DOUBLE"
- 2040 REM ------------------------------
- 2050 GOSUB 6200 : K=1 'INITIALIZE
- 2060 REM ASK FOR PARAMETERS
- 2070 Q1$="ENTER DATA" :Q2$=""
- 2080 Q3$="PERIODS PER YEAR" :GOSUB 6600
- 2090 Q3$="ANNUAL INT RATE (%)" :GOSUB 6600
- 2100 REM DO THE COMPUTATION
- 2110 PRINT : PRINT "TIME TO DOUBLE (YRS)";TAB(25)
- 2120 I=PAR(2)/100/PAR(1)
- 2130 Y=LOG(2)/(PAR(1)*LOG(1+I))
- 2140 Y=INT(Y*100+0.5)/100
- 2150 PRINT USING "######.##"; Y
- 2160 Q2$="COMPUTE" : GOSUB 3400 'ASK FOR ANOTHER
- 2170 IF YN$="N" THEN RETURN ELSE GOTO 2050
- 2180 REM ------------------------------
- 2190 N$= "EQUIVALENT INTEREST RATE"
- 2200 REM ------------------------------
- 2210 GOSUB 6200 : K=1 'INITIALIZE
- 2220 REM ASK FOR PARAMETERS
- 2230 Q1$="ENTER DATA" :Q2$=""
- 2240 Q3$="ANNUAL INT RATE (%)" :GOSUB 6600
- 2250 Q3$="AVAILABLE PERIODS " :GOSUB 6600
- 2260 Q3$="DESIRED PERIODS " :GOSUB 6600
- 2270 I=PAR(1) : Q2=PAR(2) : Q1=PAR(3)
- 2280 IEQ=Q1*(1+I/100/Q2)^(Q2/Q1)-Q1
- 2290 PRINT : PRINT "EQUIV INT RATE";TAB(25)
- 2300 PRINT USING "######.##";IEQ*100
- 2310 Q2$="COMPUTE" : GOSUB 3400
- 2320 IF YN$="N" THEN RETURN ELSE GOTO 2210
- 3400 REM "ANOTH"
- 3401 ' --------------------------------
- 3402 ' ASK FOR ANOTHER RUN
- 3403 '
- 3404 'THIS ROUTINE ASKS THE USER WHETHER TO CONTINUE
- 3405 '
- 3406 'CALLING PARAMETERS:
- 3407 ' Q2$= STRING TO SPECIFY WHAT OPERATION TO DO
- 3408 '
- 3409 'RETURNED PARAMETERS:
- 3410 ' YN$= A "Y" OR "N" FOR YES OR NO
- 3411 '
- 3412 ' --------------------------------
- 3420 Q1$="WOULD YOU LIKE TO "
- 3430 Q3$="AGAIN Y OR N ?"
- 3440 GOSUB 5000 'PRESENT DIALOG
- 3450 GOSUB 7800 'ASK YES OR NO
- 3460 RETURN
- 5000 REM "DIALOG"
- 5001 ' -------------------------------
- 5002 ' DIALOGUE
- 5003 '
- 5004 'CALLING PARAMETERS:
- 5005 ' Q1$,Q2$,Q3$, = QUESTIONS TO DISPLAY
- 5006 '
- 5007 'RETURNED PARAMETERS:
- 5008 ' NONE
- 5009 '
- 5010 'COMMENT: UNUSED QUESTION STRINGS SHOULD BE SET
- 5011 ' TO NULL ("")
- 5012 '
- 5013 ' -------------------------------
- 5020 FOR I= 20 TO 23
- 5030 LOCATE I,1
- 5040 IF I > 20 THEN 5080
- 5050 FOR J= 1 TO 40 'DRAW A BORDER
- 5060 PRINT "-";
- 5070 NEXT J
- 5080 IF I = 21 THEN PRINT Q1$; 'FIRST QUESTION
- 5090 IF I = 22 THEN PRINT Q2$; 'SECOND QUESTION
- 5100 IF I = 23 THEN PRINT Q3$; 'THIRD QUESTION
- 5109 REM RESTORE CURSOR HERE AFTER 3RD QUEST
- 5110 CP1=POS(N)
- 5120 CP=POS(N) 'CURSOR COLUMN POSITION
- 5130 IF CP>40 THEN 5150
- 5140 PRINT " "; : GOTO 5120 'ERASE ANY PRIOR INFO
- 5149 REM RESTORE CURSOR FOR USER RESPONSE
- 5150 LOCATE I,CP1
- 5160 NEXT I
- 5170 RETURN
- 5400 REM "INCH"
- 5401 ' ------------------------------
- 5402 ' INPUT CHARACTER
- 5403 '
- 5404 'CALLING PARAMETERS:
- 5405 ' NONE
- 5406 '
- 5407 'RETURNED PARAMETERS:
- 5408 ' CH$=INPUT CHARACTER
- 5409 '
- 5410 ' ------------------------------
- 5420 REM WAIT FOR INPUT CHARACTER
- 5430 CH$= INKEY$ : IF CH$="" THEN 5430
- 5440 Z=ASC(CH$)
- 5450 IF Z < 97 OR Z > 122 THEN 5470
- 5460 Z=Z-32
- 5470 CH$=CHR$(Z)
- 5480 RETURN
- 6200 REM "INIT"
- 6201 '----------------------------------
- 6202 ' INITIALIZE DISPLAY
- 6203 '
- 6204 'THIS ROUTINE CLEARS THE SCREEN
- 6205 ' AND PRINTS THE PROGRAM TITLE
- 6206 'CALLING PARAMETERS:
- 6207 ' N$=TITLE OF PROGRAM
- 6208 '
- 6209 'RETURNED PARAMETERS:
- 6210 ' NONE
- 6211 '
- 6212 ' ----------------------------------
- 6220 CLS 'CLEAR SCREEN
- 6230 PRINT N$ : PRINT 'TITLE
- 6240 KEY OFF
- 6250 RETURN
- 6600 REM "INPAR"
- 6601 ' --------------------------------
- 6602 ' INPUT PARAMETERS
- 6603 '
- 6604 'CALLING PARAMETERS:
- 6605 ' Q1$,Q2$=USER INSTRUCTIONS
- 6606 ' Q3$=NAME OF DATA ITEM
- 6607 '
- 6608 'RETURNED PARAMETERS:
- 6609 ' PAR(K)=THE DATA ITEM OBTAINED
- 6610 '
- 6611 'COMMENT: CALL WITH K=1 FOR FIRST DATA ITEM
- 6612 ' K AUTOMATICALLY UPDATED
- 6613 '
- 6614 ' -------------------------------
- 6620 GOSUB 5000 'ASK QUESTIONS
- 6630 INPUT PAR(K) 'GET VALUE
- 6640 REM ECHO QUESTION AND ANSWER
- 6650 LOCATE K+2,3
- 6660 PRINT Q3$; TAB(24);
- 6670 PRINT USING "######,.##"; PAR(K)
- 6680 K=K+1
- 6690 RETURN
- 7000 REM "MENU"
- 7001 ' ------------------------------
- 7002 ' MENU PROGRAM
- 7003 '
- 7004 'THIS PROGRAM DISPLAYS A MENUE
- 7005 ' AND CHOOSES A PROGRAM
- 7006 'CALLING PARAMETERS:
- 7007 ' N= NO. OF MENU ITEMS
- 7008 ' X$(I)= ARRAY OF PROGRAM NAMES
- 7009 '
- 7010 'RETURNED PARAMETERS:
- 7011 ' X=PROGRAM NUMBER CHOSEN
- 7012 '
- 7013 ' ------------------------------
- 7020 CLS
- 7030 FOR I = 1 TO N 'DISPLAY MENU
- 7040 IF I=10 THEN PRINT 0; ELSE PRINT I;
- 7050 PRINT "= " ; X$(I)
- 7060 NEXT I
- 7070 Q1$="" : Q2$=""
- 7080 Q3$="CHOOSE PROGRAM :"
- 7085 PRINT:PRINT" F10 to EXIT program
- 7090 GOSUB 5000 'ASK QUESTIONS
- 7100 GOSUB 5400 'INPUT CHAR
- 7110 X= VAL(CH$)
- 7119 REM SEE IF CHAR IN RANGE
- 7120 IF X>=1 AND X<=N THEN RETURN
- 7130 IF X=0 AND N=10 THEN 7140 ELSE 7150
- 7140 X=10 : RETURN
- 7150 Q1$="ILLEGAL CHOICE, CHOOSE AGAIN"
- 7160 GOSUB 5000
- 7170 GOTO 7100
- 7800 REM "YESNO"
- 7801 ' -------------------------------
- 7802 ' YES-NO
- 7803 '
- 7804 'CALLING PARAMETERS:
- 7805 ' NONE
- 7806 '
- 7807 'RETURNED PARAMETERS:
- 7808 ' YN$= CONTAINS A Y OR N
- 7809 '
- 7810 ' -------------------------------
- 7815 LOCATE 24,40:PRINT" F6 or F10 to EXIT program
- 7820 REM WAIT FOR KEY TO BE STRUCK
- 7830 YN$=INKEY$ : IF YN$="" THEN 7830
- 7840 IF YN$="y" THEN YN$="Y"
- 7850 IF YN$="n" THEN YN$="N"
- 7860 IF YN$ = "Y" OR YN$ = "N" THEN 7890
- 7870 REM NOT YES OR NO TRY AGAIN
- 7880 GOTO 7830
- 7890 PRINT YN$ : RETURN
-